package com.xpffly.design.observer.common.service;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: 午夜学徒
 * @Date: 2022/4/3 12:49
 * @Description： 主题抽象类--被观察者
 */
public abstract class Subject {
    /**
     * 观察者集合
     */
    private List<Observer> observerList = new ArrayList<Observer>();

    /**
     * 添加观察者
     *
     * @param observer
     */
    public void addObserver(Observer observer) {
        observerList.add(observer);
    }

    /**
     * 移除观察者
     *
     * @param observer
     */
    public void removeObserver(Observer observer) {
        observerList.remove(observer);
    }

    /**
     * 通知观察者
     *
     * @param data
     */
    public void notifyObservers(String data) {
        int size = observerList.size();
        for (int i = 0; i < size; i++) {
            // 多观察者时，这里考虑采用多线程异步处理，防止阻塞
            observerList.get(i).update(data);
        }
    }
}
